package com.kexio.config.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 配置属性注解
 * 用于标记需要从配置中心读取的属性
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ConfigProperty {
    
    /**
     * 配置键名
     */
    String value();
    
    /**
     * 默认值
     */
    String defaultValue() default "";
    
    /**
     * 配置描述
     */
    String description() default "";
    
    /**
     * 是否必需
     */
    boolean required() default false;
    
    /**
     * 是否自动刷新
     */
    boolean autoRefresh() default true;
    
    /**
     * 数据类型
     */
    DataType dataType() default DataType.STRING;
    
    /**
     * 数据类型枚举
     */
    enum DataType {
        STRING,
        INTEGER,
        LONG,
        BOOLEAN,
        DOUBLE,
        JSON
    }
}
